const app = getApp();
import { get, post } from '../../utils/request';
import auth from '../../utils/auth';

Page({
  data: {
    tabs: [
      { id: 0, name: '全部', status: '' },
      { id: 1, name: '待付款', status: 'pending' },
      { id: 2, name: '已支付', status: 'paid' },
      { id: 3, name: '进行中', status: 'in_progress' },
      { id: 4, name: '已完成', status: 'completed' },
      { id: 5, name: '已取消', status: 'canceled' }
    ],
    activeTab: 0,
    orderList: [],
    loading: false,
    current: 1,
    pageSize: 10,
    hasMore: true,
    userType: 'user' // 用户类型，默认为普通用户，可选值：user(普通用户)、worker(服务人员)
  },

  onLoad() {
    // 检查登录状态
    if (!this.checkLogin()) {
      return; // 如果未登录，中止后续操作
    }

    // 普通用户继续执行
    this.getOrderList(true);
  },

  // 每次页面显示时检查身份
  onShow() {
    // 检查登录状态
    if (!auth.isLoggedIn()) {
      return; // 如果未登录，中止后续操作
    }

    // 检查是否是服务人员，如果是则跳转到服务人员订单页
    if (auth.isProvider()) {
      wx.reLaunch({
        url: '/pages/provider/orders/orders'
      });
      return; // 中止后续操作
    }
  },

  // 检查是否登录
  checkLogin() {
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 1500
      });

      // 跳转到登录页面
      setTimeout(() => {
        wx.navigateTo({
          url: '/pages/login/login'
        });
      }, 1500);
      return false;
    }
    return true;
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.setData({
      current: 1,
      hasMore: true
    }, () => {
      this.getOrderList(true);
    });
  },

  // 触底加载更多
  onReachBottom() {
    if (this.data.hasMore && !this.data.loading) {
      this.getOrderList();
    }
  },

  // 切换Tab
  changeTab(e) {
    const index = e.currentTarget.dataset.index;
    this.setData({
      activeTab: index,
      current: 1,
      orderList: [],
      hasMore: true
    }, () => {
      this.getOrderList(true);
    });
  },

  // 格式化时间显示
  formatTime(timeString) {
    if (!timeString) return '';

    try {
      // 处理带T和Z的ISO格式时间
      timeString = timeString.replace('T', ' ').replace('Z', '');

      // 判断是否包含毫秒
      if (timeString.includes('.')) {
        timeString = timeString.split('.')[0];
      }

      // 如果包含+号后面的时区信息，去掉
      if (timeString.includes('+')) {
        timeString = timeString.split('+')[0];
      }

      // 分割日期和时间
      const parts = timeString.split(' ');
      if (parts.length === 2) {
        const date = parts[0]; // 2025-03-31
        const time = parts[1].substring(0, 5); // 只取小时和分钟 (11:00)
        return `${date} ${time}`;
      }

      return timeString;
    } catch (error) {
      console.error('时间格式化错误', error);
      return timeString;
    }
  },

  // 获取订单列表
  getOrderList(refresh = false) {
    if (this.data.loading) return;

    this.setData({ loading: true });

    const status = this.data.tabs[this.data.activeTab].status;

    // 调用获取订单列表接口
    post('/api/orders/my/list/page/vo', {
      current: refresh ? 1 : this.data.current,
      pageSize: this.data.pageSize,
      status: status,
      sortField: 'createTime',
      sortOrder: 'desc'
    }).then(res => {
      if (res.code === 0 && res.data) {
        const newList = res.data.records.map(order => ({
          id: order.id,
          serviceId: order.serviceId,
          serviceName: order.serviceName,
          serviceImage: order.serviceImage || '/assets/images/default.png',
          totalPrice: order.totalPrice,
          status: order.status,
          statusText: this.getStatusText(order.status),
          appointmentTime: this.formatTime(order.appointmentTime),
          createTime: this.formatTime(order.createTime),
          address: order.addressDetail,
          customerName: order.userName, // 对服务人员显示
          customerId: order.userId, // 对服务人员显示
          customerPhone: order.userPhone || '', // 对服务人员显示
          providerId: order.providerId,
          providerName: order.providerName || '',
          providerPhone: order.providerPhone || '' // 对用户显示
        }));

        let list = [];
        if (refresh) {
          list = newList;
        } else {
          list = this.data.orderList.concat(newList);
        }

        this.setData({
          orderList: list,
          loading: false,
          hasMore: this.data.current < res.data.pages,
          current: refresh ? 2 : this.data.current + 1
        });
      } else {
        this.setData({
          loading: false,
          hasMore: false
        });

        wx.showToast({
          title: res.message || '获取订单列表失败',
          icon: 'none'
        });
      }

      if (refresh) {
        wx.stopPullDownRefresh();
      }
    }).catch(err => {
      console.error('获取订单列表失败', err);
      this.setData({
        loading: false,
        hasMore: false
      });

      wx.showToast({
        title: '获取订单列表失败',
        icon: 'none'
      });

      if (refresh) {
        wx.stopPullDownRefresh();
      }
    });
  },

  // 获取状态文字
  getStatusText(status) {
    switch (status) {
      case 'pending':
        return '待支付';
      case 'paid':
        return '已支付';
      case 'in_progress':
        return '进行中';
      case 'completed':
        return '已完成';
      case 'refunded':
        return '已退款';
      case 'canceled':
        return '已取消';
      default:
        return '未知';
    }
  },

  // 查看订单详情
  goToOrderDetail(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/order/detail/detail?id=${id}`
    });
  },

  // 支付订单
  payOrder(e) {
    const id = e.currentTarget.dataset.id;

    wx.showLoading({
      title: '正在处理...',
      mask: true
    });

    // 调用支付订单接口
    post(`/api/orders/pay/${id}`).then(res => {
      wx.hideLoading();

      if (res.code === 0 && res.data) {
        wx.showToast({
          title: '支付成功',
          icon: 'success'
        });

        // 刷新列表
        setTimeout(() => {
          this.setData({
            current: 1
          }, () => {
            this.getOrderList(true);
          });
        }, 1500);
      } else {
        wx.showToast({
          title: res.message || '支付失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('支付订单失败', err);

      wx.showToast({
        title: '支付失败',
        icon: 'none'
      });
    });
  },

  // 取消订单
  cancelOrder(e) {
    const id = e.currentTarget.dataset.id;

    wx.showModal({
      title: '提示',
      content: '确定要取消订单吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用取消订单接口
          post(`/api/orders/cancel/${id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '取消成功',
                icon: 'success'
              });

              // 刷新列表
              setTimeout(() => {
                this.setData({
                  current: 1
                }, () => {
                  this.getOrderList(true);
                });
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '取消失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('取消订单失败', err);

            wx.showToast({
              title: '取消失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },

  // 完成服务（仅服务人员）
  completeService(e) {
    const id = e.currentTarget.dataset.id;

    wx.showModal({
      title: '提示',
      content: '确认已完成服务？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用完成订单接口
          post(`/api/orders/complete/${id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '操作成功',
                icon: 'success'
              });

              // 刷新列表
              setTimeout(() => {
                this.setData({
                  current: 1
                }, () => {
                  this.getOrderList(true);
                });
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '操作失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('完成服务失败', err);

            wx.showToast({
              title: '操作失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },

  // 联系客户（仅服务人员）
  contactCustomer(e) {
    const phone = e.currentTarget.dataset.phone;
    if (phone) {
      wx.makePhoneCall({
        phoneNumber: phone
      });
    } else {
      wx.showToast({
        title: '电话号码不可用',
        icon: 'none'
      });
    }
  },

  // 删除订单
  deleteOrder(e) {
    const id = e.currentTarget.dataset.id;

    wx.showModal({
      title: '提示',
      content: '确定要删除该订单吗？删除后无法恢复！',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用删除订单接口
          post(`/api/orders/delete/${id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '删除成功',
                icon: 'success'
              });

              // 刷新列表
              setTimeout(() => {
                this.setData({
                  current: 1
                }, () => {
                  this.getOrderList(true);
                });
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '删除失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('删除订单失败', err);

            wx.showToast({
              title: '删除失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },

  // 联系师傅（用户端）
  contactProvider(e) {
    const providerId = e.currentTarget.dataset.id;

    if (!providerId) {
      wx.showToast({
        title: '服务人员未分配',
        icon: 'none'
      });
      return;
    }

    // 显示加载中
    wx.showLoading({
      title: '加载中...',
      mask: true
    });

    // 调用获取服务人员信息接口
    wx.request({
      url: `${app.globalData.baseUrl}/api/service-provider/get/vo`,
      method: 'GET',
      header: {
        'Authorization': app.globalData.token
      },
      data: {
        id: providerId
      },
      success: (res) => {
        wx.hideLoading();
        if (res.data.code === 0 && res.data.data) {
          const provider = res.data.data;

          // 格式化评分，保留一位小数
          const rating = provider.rating ? provider.rating.toFixed(1) : '暂无';

          // 显示手机号弹窗
          wx.showModal({
            title: '服务人员联系方式',
            content: `姓名：${provider.realName || '未知'}\n电话：${provider.phone || '未提供'}\n评分：${rating}`,
            confirmText: '拨打电话',
            cancelText: '关闭',
            confirmColor: '#07c160',
            success: (result) => {
              if (result.confirm && provider.phone) {
                wx.makePhoneCall({
                  phoneNumber: provider.phone
                });
              }
            }
          });
        } else {
          wx.showToast({
            title: res.data.message || '获取联系方式失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 申请退款
  applyRefund(e) {
    const id = e.currentTarget.dataset.id;

    wx.showModal({
      title: '申请退款',
      content: '确定要申请退款吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用申请退款接口
          post(`/api/orders/refund/${id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '申请成功',
                icon: 'success'
              });

              // 刷新列表
              setTimeout(() => {
                this.setData({
                  current: 1
                }, () => {
                  this.getOrderList(true);
                });
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '申请失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('申请退款失败', err);

            wx.showToast({
              title: '申请失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },
}) 